import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('../images/cpa.jpg')
def convert(img):
    b, g, r = cv2.split(img)
    dst = cv2.merge([r, g, b])
    return dst

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 小于150，设置为0，大于150，设置为255
# 选择双波峰之间波谷部分的值作为阈值
ret, thr = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# 转为rgb格式，plt显示图像以rgb格式显示，"gray"指定使用灰度颜色映射
plt.subplot(2, 2, 1), plt.imshow(convert(img), "gray")
# plt.hist绘制直方图，gray.ravel()将灰度图像gray展平为一维数组，
# 256表示直方图的柱数（bins），即灰度值的范围从0到255。
plt.subplot(2, 2, 2), plt.hist(gray.ravel(), 256)
plt.subplot(2, 2, 3), plt.imshow(thr, "gray")
plt.subplot(2, 2, 4), plt.hist(thr.ravel(), 256)
plt.show()

print("--------灰度图--------")
print(gray[0, 0:10])
print("--------灰度图展平--------")
print(gray.ravel()[0:10])
print("--------阈值图--------")
print(thr[0, 0:10])
print("--------阈值展平图--------")
print(thr.ravel()[0:10])